# 使用scrapy-redis分布式爬取CSDN学院平台中所有课程信息。如：https://edu.csdn.net/courses/k 爬取所有课程详情url地址。然后再通过队列url中对应的每个课程详情信息，使用分布式爬取。如：https://edu.csdn.net/course/detail/5466。
# 要求内容：课程标题，课时、讲师、适合人群、学习人数、价格、课程大纲。
# 辅助功能：将爬取的课程信息从Redis数据库转存至MongoDB
# 第十周作业2)
# 班级：Python五期
# 学员：李子坚
# process_csdn_mongodb.py

# -*- coding: utf-8 -*-

import json
import redis
import pymongo

def main():

    # 指定Redis数据库信息
    rediscli = redis.StrictRedis(host='localhost', port=6379, db=0)
    # 指定MongoDB数据库信息
    mongocli = pymongo.MongoClient(host='localhost', port=27017)

    # 创建数据库名
    db = mongocli['csdn']
    # 创建集合名
    sheet = db['courses']

    print("正在提取Redis数据库的CSDN课程信息，请稍候……")
    
    while rediscli.exists("course:items"):
        # FIFO模式为 blpop，LIFO模式为 brpop，获取键值
        source, data = rediscli.blpop(["course:items"])

        # 从Redis list取值插入MongoDB集合
        item = json.loads(data)
        sheet.insert(item)

        try:
            print(u"Processing: %(title)s <%(professor)s>" % item)
        except KeyError:
            print(u"Error procesing: %r" % item)

    print("Redis数据库的CSDN课程信息提取完成，请查看MongoDB<csdn>的集合<courses>")
    

if __name__ == '__main__':
    main()
